package com.yanze.schoolinformation.model.http.service;

import com.yanze.schoolinformation.model.bean.GankDataBean;
import com.yanze.schoolinformation.model.bean.HotMovieBean;
import com.yanze.schoolinformation.model.bean.MovieDetailBean;
import com.yanze.schoolinformation.model.bean.QsbkListBean;
import com.yanze.schoolinformation.model.bean.WanAndroidBannerBean;
import com.yanze.schoolinformation.model.bean.WanAndroidListBean;
import com.yanze.schoolinformation.model.bean.book.BookBean;
import com.yanze.schoolinformation.model.bean.book.BookDetailBean;
import com.yanze.schoolinformation.model.bean.req.ReqBookCommit;
import com.yanze.schoolinformation.model.bean.req.ReqCommitDynamic;
import com.yanze.schoolinformation.model.bean.req.ReqDynamics;
import com.yanze.schoolinformation.model.bean.req.ReqIssue;
import com.yanze.schoolinformation.model.bean.req.ReqLostedthing;
import com.yanze.schoolinformation.model.bean.req.ReqSecondBook;
import com.yanze.schoolinformation.model.bean.req.ReqUser;
import com.yanze.schoolinformation.model.bean.resp.RespBook;
import com.yanze.schoolinformation.model.bean.resp.RespBookCommit;
import com.yanze.schoolinformation.model.bean.resp.RespCurr;
import com.yanze.schoolinformation.model.bean.resp.RespDynamic;
import com.yanze.schoolinformation.model.bean.resp.RespDynamicCommit;
import com.yanze.schoolinformation.model.bean.resp.RespHomeBanner;
import com.yanze.schoolinformation.model.bean.resp.RespImage;
import com.yanze.schoolinformation.model.bean.resp.RespLosted;
import com.yanze.schoolinformation.model.bean.resp.RespUser;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;

/**
 * 数据接口
 * Created by MrZheng on 2018/4/4.
 */

public interface DataService {

    //测试
    @GET("v1/api/getString")
    Observable<String> getString(@Query("param") String param);


    //、、、、、、、、、、、、电影

    /**
     * 获取豆瓣电影top250
     *
     * @param start 从多少开始，如从"0"开始
     * @param count 一次请求的数目，如"10"条，最多100
     */
    @GET("v2/movie/top250")
    Observable<HotMovieBean> getMovieTop250(@Query("start") int start, @Query("count") int count);

    /**
     * 获取电影详情
     *
     * @param id 电影bean里的id
     */
    @GET("v2/movie/subject/{id}")
    Observable<MovieDetailBean> getMovieDetail(@Path("id") String id);

    /**
     * 豆瓣热映电影，每日更新
     */
    @GET("v2/movie/in_theaters")
    Observable<HotMovieBean> getHotMovie();


    //、、、、、、、、、、、、图书

    /**
     * 根据tag获取图书
     *
     * @param tag   搜索关键字
     * @param count 一次请求的数目 最多100
     */
    @GET("v2/book/search")
    Observable<BookBean> getBookByTag(@Query("tag") String tag, @Query("start") int start, @Query("count") int count);

    @GET("v2/book/{id}")
    Observable<BookDetailBean> getBookDetail(@Path("id") String id);


    //、、、、、、、、、、、、、干货

    /**
     * 分类数据: http://gank.io/api/data/数据类型/请求个数/第几页
     * 数据类型： 福利 | Android | iOS | 休息视频 | 拓展资源 | 前端 | all
     * 请求个数： 数字，大于0
     * 第几页：数字，大于0
     * eg: http://gank.io/api/data/Android/10/1
     */
    @GET("data/{type}/{pre_page}/{page}")
    Observable<GankDataBean> getGankIoData(@Path("type") String type, @Path("pre_page") int pre_page, @Path("page") int page);


    /**
     * 玩安卓轮播图
     */
    @GET("banner/json")
    Observable<WanAndroidBannerBean> getWanAndroidBanner();

    //获取玩安卓列表内容
    @GET("article/list/{page}/json")
    Observable<WanAndroidListBean> getWanaAndroidList(@Path("page") int page);


    /**
     * @param page 页码，从1开始
     */
    @GET("article/list/text")
    Observable<QsbkListBean> getQsbkList(@Query("page") int page);


    //===============================我的服务器接口
    @POST("user/register")
    Observable<RespUser> register(@Body ReqUser user);

    @POST("user/login")
    Observable<RespUser> login(@Query("phone") String phone, @Query("password") String password);

    /**
     * 修改头像
     */
    @Multipart
    @Headers("enctype:multipart/form-data")
    @POST("user/uploadHeader")
    Observable<RespUser> upheader(@Query("userid") String userid, @Part MultipartBody.Part body);

    /**
     * 修改用户信息
     */
    @POST("user/modifyUserInfo")
    Observable<RespUser> modify(@Query("userid") String userid,
                                @Query("nickname") String nickname,
                                @Query("userqq") String userqq,
                                @Query("userwechat") String userwechat);

    /**
     * 根据Userid获取用户信息
     */
    @GET("user/getUserInfoById")
    Observable<RespUser> getUserInfoById(@Query("userid") String userid);

    /**
     * 上传单个图片
     */
    @Multipart
    @Headers("enctype:multipart/form-data")
    @POST("file/upload")
    Observable<RespImage> upImage(@Part MultipartBody.Part body);

    /**
     * 获取所有动态
     */
    @GET("friend/getDynamics/{page}/{pageSize}")
    Observable<RespDynamic> getAllDynamics(@Path("page") int page, @Path("pageSize") int pageSize);

    /**
     * 根据id获取动态
     */
    @GET("friend/getDynamicsById/{userid}/{page}/{pageSize}")
    Observable<RespDynamic> getDynamicsById(@Path("userid") String userid, @Path("page") int page, @Path("pageSize") int pageSize);

    /**
     * 发布动态
     */
    @POST("friend/publishDynamics")
    Observable<RespCurr> publishDynamic(@Body ReqDynamics dynamics);

    /**
     * 删除动态
     */
    @POST("friend/deleteDynamics")
    Observable<RespCurr> deleteDynamic(@Query("friendid") long friendid);

    /**
     * 发表动态评论
     */
    @POST("friend/publishCommit")
    Observable<RespCurr> publishDynamicCommit(@Body ReqCommitDynamic commitDynamic);

    /**
     * 获取动态评论
     */
    @GET("friend/getDynamicCommit/{dynamicId}")
    Observable<RespDynamicCommit> getDynamicCommit(@Path("dynamicId") long dynamicId);

    /**
     * 删除动态评论
     */
    @DELETE("friend/deleteCommit/{commitid}")
    Observable<RespCurr> deleteDynamicCommit(@Path("commitid") long commitid);


    /**
     * 获取二手书
     */
    @GET("book/getAllBook/{page}/{pageSize}")
    Observable<RespBook> getAllSecondBook(@Path("page") int page, @Path("pageSize") int pageSize);


    /**
     * 根据id获取二手书
     */
    @POST("book/getBookById/{userid}/{page}/{pageSize}")
    Observable<RespBook> getSecondBookById(@Path("userid") String userid, @Path("page") int page, @Path("pageSize") int pageSize);

    /**
     * 发布二手书
     */
    @POST("book/publishBook")
    Observable<RespCurr> publishBook(@Body ReqSecondBook secondBook);

    /**
     * 删除二手书
     */
    @POST("book/deleteBook")
    Observable<RespCurr> deleteBook(@Query("bookid") long bookid);

    /**
     * 发表二手书评论
     */
    @POST("book/publisBookCommit")
    Observable<RespCurr> publisBookCommit(@Body ReqBookCommit bookCommit);

    /**
     * 获取二手书评论
     */
    @GET("book/getCommitByBookid/{bookid}")
    Observable<RespBookCommit> getBookCommit(@Path("bookid") long bookid);

    /**
     * 删除二手书评论
     */
    @DELETE("book/deleteBookSecond/{commitid}")
    Observable<RespCurr> deleteBookCommit(@Path("commitid") long commitid);



    /**
     * 发布失物招领
     */
    @POST("losted/publishLosted")
    Observable<RespCurr> publishLosted(@Body ReqLostedthing lostedthing);

    /**
     * 获取所有失物招领
     */
    @GET("losted/getAllLosted/{page}/{pageSize}")
    Observable<RespLosted> getAllLostthings(@Path("page") int page, @Path("pageSize") int pageSize);

    /**
     * 根据id获取失物招领
     */
    @GET("losted/getLostedById/{userid}/{page}/{pageSize}")
    Observable<RespLosted> getLostthingsById(@Path("userid") String userid, @Path("page") int page, @Path("pageSize") int pageSize);

    /**
     * 删除失物招领
     */
    @DELETE("losted/deleteLosted/{lostedid}")
    Observable<RespCurr> deleteLosted(@Path("lostedid") long lostedid);

    /**
     * 意见反馈
     */
    @POST("issue/addissue")
    Observable<RespCurr> fackIssue(@Body ReqIssue issue);

    /**
     * 获取首页banner图
     */
    @GET("home/getHomeBanner")
    Observable<RespHomeBanner> getHomeBanner();
}


